package com.itdr.utils;

import cn.hutool.cache.Cache;
import cn.hutool.cache.CacheUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.digest.DigestUtil;
import com.itdr.common.Const;
import com.itdr.common.ServerResponse;

import java.util.HashMap;
import java.util.Map;

/**
 * ClassName: TokenUtil
 * 日期: 2020/10/23 15:42
 *
 * @author Air张
 * @since JDK 1.8
 */
public class TokenUtil {

    public static Cache<String,String> fifoCache = CacheUtil.newFIFOCache(10);

    /**
     * 生成一个令牌
     * @param length
     * @return
     */
    public static String getToken(int length){
        String s = RandomUtil.randomString(length);
        String s1 = DigestUtil.md5Hex(s);
        return s1;
    }

    /**
     * 生成令牌并放入缓存
     * @param length
     * @param tName
     * @return
     */
    public static String putInCache(int length,String tName){
        // 创建一个token
        String token = getToken(length);
        //加入元素，每个元素可以设置其过期时长，DateUnit.SECOND.getMillis()代表每秒对应的毫秒数，在此为3秒
        fifoCache.put(tName,token , DateUnit.SECOND.getMillis() * 60);
        return token;
    }

    public static Map<Boolean,String> yzToken(String tk,String tokenName){
        Map<Boolean,String> m = new HashMap<Boolean,String>();
        // 1.判断令牌是否存在
        String s = TokenUtil.fifoCache.get(tokenName);
        if(s == null){
            m.put(false,Const.LOSE_TOKEN);
            return m;
        }
        // 2.判断令牌是否匹配
        if(!s.equals(tk)){
            m.put(false,Const.NO_MAPPING_TOKEN);
            return m;
        }
        m.put(true,"");
        return m;
    }
}
